package com.ruoyi.system.media;

/**
 * 卡片发行基本数据文件(DF01/0015)编码信息
 * 老卡43个字节
 * 新卡50个字节
 */
public class Ucard0015EdModel {
    public static final int MSG_LEN_1 = 43;
    public static final int MSG_LEN_2 = 50;

    /**
     * 发卡标识(01-08,8,cn)
     * 格式：AAAAAAAA + BBBB + CC + DD
     * AAAAAAAA ：省级行政区划代码，2 个汉字（4 个字节）；
     * BBBB ：运营商标识，压缩BCD码，河南为0x4101；
     * CC ：保留；DD ：密钥分散标识，取值为 01。
     * 样例：0xBAD3C4CF41010001
     */
    public byte[] cIssData = new byte[8];

    /**
     * 卡片类型(09-09,1,n)22-储值卡；23-记账卡
     */
    public byte[] nCardCls = new byte[1];

    /**
     * 卡片版本(10-10,1,cn)统一为0x40
     */
    public byte[] nCardVsn = new byte[1];

    /**
     * 卡片网络(11-12,2,cn)0x4101
     */
    public byte[] cNetWork = new byte[2];

    /**
     * 卡片内部编号(13-20,8,cn)
     * 由1 字节“初始化年份”、1 字节“初始化星期”、1 字节“卡片类型”和5字节“卡片序列号”组成
     */
    public byte[] cCardsId = new byte[8];

    /**
     * 启用时间(21-24,4,cn)
     * 格式:0xccyymmdd
     */
    public byte[] cStaDtTm = new byte[4];

    /**
     * 到期时间(25-28,4,cn)
     * 格式:0xccyymmdd
     */
    public byte[] cEndDtTm = new byte[4];

    /**
     * 车牌号码(29-40,12,an)
     */
    public byte[] cCarPlat = new byte[12];

    /**
     * 用户类型(41-41,1,n)
     * 0-普通车； 6-公务车； 8-军警车； 10-紧急车； 12-免费；14-车队； 0～20 内其他：自定义；
     * 21-绿通车； 22-联合收割机 ; 23-抢险救灾; 24－J1专用集装箱车；25-大件运输; 26－应急救援车；27－货车列车或半挂汽车列车;28-J2集装箱车
     */
    public byte[] nUserCls = new byte[1];

    /**
     * 车牌颜色(原自定义数据)(42-42,1,n)
     * 0x00 –蓝色； 0x01–黄色； 0x02 –黑色； 0x03 –白色； 0x04－渐变绿色； 0x05－黄绿双拼色； 0x06－蓝白渐变；0x07～ 0xFF 保留
     */
    public byte[] nPlatClr = new byte[1];

    /**
     * 车型(折扣率值)(43-43,1,n)
     * 1~4：客1~客4；11~16：货1~货6；21~26：专1~专6
     */
    public byte[] nVType = new byte[1];

    /**
     * 保留(44-50,7,an)
     */
    public byte[] spare0015 = new byte[7];

    /**
     * 信息编码
     *
     * @param dd
     * @return
     */
    public static Ucard0015EdModel encoded(Ucard0015Model dd) {
        Ucard0015EdModel ed = new Ucard0015EdModel();
        ed.cIssData = ZTools.hex2bin(8, dd.cIssData);
        ed.nCardCls = ZTools.int2bin(1, dd.nCardCls);
        ed.nCardVsn = ZTools.hex2bin(1, dd.nCardVsn);
        ed.cNetWork = ZTools.hex2bin(2, dd.cNetWork);
        ed.cCardsId = ZTools.hex2bin(8, dd.cCardsId);
        ed.cStaDtTm = ZTools.hex2bin(4, dd.cStaDtTm);
        ed.cEndDtTm = ZTools.hex2bin(4, dd.cEndDtTm);
        ed.cCarPlat = ZTools.str2bin(12, dd.cCarPlat);
        ed.nUserCls = ZTools.int2bin(1, dd.nUserCls);
        ed.nPlatClr = ZTools.int2bin(1, dd.nPlatClr);
        ed.nVType = ZTools.int2bin(1, dd.nVType);
        ed.spare0015 = ZTools.hex2bin(7, dd.spare0015);

        return ed;
    }

    public byte[] toBytes() {
        byte[] ret = ZTools.sbMerger(cIssData, nCardCls, nCardVsn, cNetWork, cCardsId, cStaDtTm, cEndDtTm, cCarPlat, nUserCls, nPlatClr, nVType, spare0015);
        return ret;
    }

    public String toHexStr() {
        return ZTools.bin2hex(toBytes());
    }
}
